home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2005 October
/
PCWOCT05.iso
/
Software
/
FromTheMag
/
XAMPP 1.4.14
/
xampp-win32-1.4.14-installer.exe
/
xampp
/
php
/
pear
/
docs
/
XML_fo2pdf
/
README.fo2pdf
next >
Wrap
Text File
|
2004-03-24
|
4KB
|
96 lines
fo to pdf converter.
with fo (formating objects) it's quite easy to convert xml-documents into
pdf-docs (and not only pdf, but also ps, pcl, txt and more)
An introduction into formating objects can be found at
http://www.w3.org/TR/xsl/slice6.html#fo-section
http://www.ibiblio.org/xml/books/bible/updates/15.html
A tutorial is here:
http://www.xml.com/pub/a/2001/01/17/xsl-fo/
http://www.xml.com/pub/a/2001/01/24/xsl-fo/
A html_to_fo.xsl can also be found there
http://www.xml.com/2001/01/24/xsl-fo/fop_article.tgz
but it didn't work for my simple xhtml files..
The way to use this class is, produce a fo-file from a xml-file with a
xsl-stylesheet, then feed this class with this fo-file and you get a pdf
back (either directly to the browser for really dynamic-pdf production or
as a file on your filesystem)
It is recommended to use the Cache-Classes from PEAR, if you want dynamic
pdf production, since the process of making the pdfs takes some time. For
an example of how to use Cache and fo2pdf see below.
Requirements:
- You need Fop (version 0.20.1 was used for testing) from the xml-apache
project (http://xml.apache.org/fop) and Java (1.1.x or later, i tested
it with 1.2.2 from sun on linux, see the Fop-Docs for details).
- Furthermore you have to compile your php with --with-java and to adjust
your php.ini file. It can be a rather painful task to get java and php
to work together. (i also tested this only with jdk 1.2.2, got 1.3.1 to work
but not together with sablotron....)
See http://www.phpbuilder.com/columns/marknold20001221.php3 or
http://www.linuxwebdevnews.com/articles/php-java-xslt.php?pid=347 or
http://www.onlamp.com/pub/a/php/2001/06/14/php_jav.html or
http://php.chregu.tv/java-debian.html (some config tips)
for more details about java and php.
For your reference, my relevant parts in php.ini looks like this:
***
extension=libphp_java.so
extension.dir=/usr/local/lib/php/20010901/
[java]
java.class.path=/usr/local/lib/php/php_java.jar:/usr/local/share/java/fop.jar:/usr/local/share/java/batik.jar:/usr/share/java/xalan-2.0.1.jar:/usr/share/java/xerces.jar:/usr/local/share/java/jimi-1.0.jar
java.library=/usr/lib/java/jre/lib/i386/libjava.so
***
- If you want to include images or svg-files, then FOP needs an XServer (this is a
limitation of the graphics-support in java. See
http://www.geocities.com/marcoschmidt.geo/java-image-coding.html
for details). Normally webservers don't have Xservers installed, but I made
some good experiences with Xfvb.
Usage:
require_once("XML/fo2pdf.php");
//make a pdf from simple.fo and save the pdf in a tmp-folder
$fop = new xml_fo2pdf();
// the following 2 lines are the default settins, so not
// necessary here, but you can set it to other values
$fop->setRenderer("pdf");
$fop->setContentType("application/pdf");
//If you want other fonts in your PDF, you need to declare them in a
// config file. Declare here the path to this file [optional].
// More information about fonts and fop on the apache-fop webpage.
$fop->setConfigFile("userconfig.xml");
if (PEAR::isError($error = $fop->run("simple.fo")))
{
die("FOP ERROR: ". $error->getMessage());
}
//print pdf to the outputbuffer,
// including correct Header ("Content-type: application/pdf")
$fop->printPDF();
//delete the temporary pdf file
$fop->deletePDF();
With Cache:
require_once("XML/fo2pdf.php");
require_once("Cache/Output.php");
$container = "file";
$options = array("cache_dir"=>"/tmp/");
$cache = new Cache_Output("$container",$options);
$cache_handle = $cache->generateID($REQUEST_URI);
if ($content = $cache->start($cache_handle)) {
Header("Content-type: application/pdf");
print $content;
die();
}
$fop = new xml_fo2pdf();
$fop->run("simple.fo");
$fop->printPDF();
$fop->deletePDF();
print $cache->end("+30");